# 引入django框架中http模块 HttpResponse函数
# 第三方模块，从网上下载来的，大神做的第三方包上传来的
from django.http import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
from django1.models import Users
from django1.models import Goods
from django1.models import Cars        #自定义模块
import math   #官方模块、内置模块
# 设置处理函数
def hw(requset):
     return HttpResponse('<h1 align="center" style="color:red;">你好</h1>')
def index(request):
     # name = request.GET.get('name')   #首页出现登录名
     #name 值获取 和session关联 uid是否存在
     if request.session.get('uid',None):
          #有值Ture说明登陆过
          name = Users.objects.filter(uid=request.session['uid'])[0].username
     else:
          #说明是无值 False说明没登录过
          name = None

     stuname = "hh"
     grade = 45
     good = {'id': 1, 'name': '西瓜', 'imgsrc': '/static/img/111.jpg', 'price': 3.9, 'count': 4}
     # goods = [
     #      {'id': 1, 'name': '西瓜', 'imgsrc': '/static/img/111.jpg', 'price': 3.9, 'count': 4},
     #      {'id': 2, 'name': '苹果', 'imgsrc': '/static/img/111.jpg', 'price': 3.9, 'count': 4},
     #      {'id': 3, 'name': '香蕉', 'imgsrc': '/static/img/111.jpg', 'price': 3.9, 'count': 4},
     #      {'id': 4, 'name': '橘子', 'imgsrc': '/static/img/111.jpg', 'price': 3.9, 'count': 4}
     # ] #中括号：列表
     #接受前端传递 keywords
     keywords = request.GET.get('keywords')
     if keywords:
          goods = Goods.objects.filter(name__contains=keywords)
     else:
          goods = Goods.objects.all()
     #给前端传递页码列表 pagelist [1,2,3......] len()方法获取列表长度 math.ceil()向上取整
     #封装函数range(start,end) 自动生成start开始（包含）到end结束（不包含）的列表
     pagelist = range(1,math.ceil(len(goods)/5)+1)
     #接收 前端传递的页码 参数
     page = request.GET.get('page')
     if page:
          #如果有值 字符串 转化为整数
          page = int(page)
     else:
          #无值 默认展示第一页
          page = 1
     #截取数据查询的结果中前五个,列表切片
     goods = goods[5*(page-1):5*page]  #goods变成了某一页的商品列表
     return render(request, "index.html", {'pagelist':pagelist,'goods': goods, "name": name, "stuname": stuname, "grade": grade})

def login(request):
     if request.POST:
          username = request.POST.get('username')
          userpsd = request.POST.get('userpsd')
          result = Users.objects.filter(username=username)
          # [ {username.hh,userpsd:000} ]
          if result:
               # 判断一下当前有值的账号对应的密码和发送的密码是否匹配
              if result[0].userpsd == userpsd:
                   # return HttpResponse('登录成功！')
                   #return render(request,'index.html')
                   #设置session会话存储 uid
                   request.session['uid'] = result[0].uid
                   return redirect('/index/')
                   #重定向路由实现get的改变。+:字符串拼接 与开头name=对接
              else:
                   #账号存在 密码错误
                   return render(request,'login.html')
          else:
               #账号不存在
               # return HttpResponse('登录失败！')
               return render(request,'register.html')
          # return render(request, "login.html")

     return render(request,'login.html')

# 中括号表示列表，

     ##老师上课
def register(request):
     if request.POST:
          username = request.POST.get('username')
          userpsd = request.POST.get('userpsd')
          # 插入数据库
          ## 将用户类  实例化 对象
          # user1 = Users(uid=1, username=username, userpsd=userpsd)
          # ## 数据保存
          # user1.save()
          Users.objects.create(uid=None,username=username,userpsd=userpsd)

     return render(request, 'register.html')




# http超文本标记语言
def nav(request):
     one = [
          {'院系设置': [
               {'理工农学院': ['计算机技术与科学', '软件工程', '土木建筑', '园艺设计']},
               {'文艺法学院': ['专业1', '专业2', '专业3', '专业4']},
               {'经管学院': ['专业5', '专业6', '专业7', '专业8']},
               {'医学院': ['专业9', '专业10', '专业11', '专业12']}
          ]},
          {'师资团队': ['师资团队1', '师资团队2', '师资团队3']},
          {'科学研究': ['科学研究1', '科学研究2']},
          {'招生就业': ['招生就业']},
         ]
     return render(request, 'nav.html', {'one': one})
def B(request):
     return render(request, 'B.html')

def goodinfo(request):
     #接收前端传递商品id参数
     gid = request.GET.get('gid')
     #接收详情页加入购物车传递的商品id POST请求
     if request.POST:
          if request.session.get('uid', None):
               gid = request.POST.get('gid')
               uid = request.session['uid']
               # 间接数据集操作 通过封装好的数据模型间接去操作数据库
               #car = Cars(gid=gid, buy_count=1, uid=uid)
               #先查询数据库中Goods表中gid对应商品的信息数据 再插入购物车表中
               good = Goods.objects.filter(gid=gid)[0]
               car = Cars(good=good,buy_count=1,uid=uid)
               car.save()
          else:
               return redirect('/login/')
     # 根据参数执行数据库操作 条件查询 filter
     goods = Goods.objects.filter(gid=gid)
     #接受 详情页加入购物车传递 商品id
     # car_gid = request.GET.get('car_gid')
     # if car_gid:
     #      #根据参数执行数据库操作 插入数据
     #      Cars.objects.create(cid=None, gid=car_gid, buy_count=1)
     #      goods = Goods.objects.filter(gid=car_gid)
     return render(request, 'goodinfo.html',{'goods':goods})

def shoppingcar(request):
     #先判断 判断是否登录 用request.session对象中是否存在键uid的值
     if request.session.get('uid',None):  # 有值Ture 说明登陆过
          #获取session中的uid
          uid = request.session['uid']
          #数据库操作 查询操作，查购物车表
          cars = Cars.objects.filter(uid=uid)
          #数据库查询结果 cars [{cid,gid,buy_count,uid}...]
          goods = []  #设定 响应前端页面的所有购物车商品数据的列表
          for item in cars: #item {cid,gid,buy_count,uid}
               #good = Goods.objects.filter(gid=item.gid)[0]
               good = item.good
               # good {gid,name,price,count,imgsrc,buy_count,allprice}
               good.buy_count = item.buy_count
               good.allprice = good.price * good.buy_count
               goods.append(good)
          return render(request,'shoppingcar.html',{'goods':goods})
     else: #无值False说明没登陆
          return redirect('/login/')

def loginout(request):
     #业务处理 --> 数据处理
     #都可以退出登录
     #删除session对象中的uid键值对，实质是对数据库中session表修改session_data字段值
     #request.session.pop('uid')
     #del requeat.session['uid']
     #request.session.clear()
     #删除数据库中session表中对应记录/数据
     #request.session.delete('request.session.session_key')
     request.session.flush()
     return redirect('/index/')
